package 双指针三指针;
import java.util.*;
/**
 * 该类用于将数组中的零元素移动到末尾。
 * 时间复杂度：O(n)，空间复杂度：O(1)
 */
public class moveZeros {
    /**
     * 将数组中的零元素移动到末尾。
     * 该方法使用双指针技术，将非零元素移到前面，然后在末尾填充零。
     * @param nums 输入数组
     */
    public void mvZero(int[] nums) {
        int ptr = 0; // 指向当前非零元素的位置
        for(int i = 0; i < nums.length; i++) {
            if(nums[i] != 0) nums[ptr++] = nums[i]; // 将非零元素移到前面
        }
        while(ptr < nums.length) {
            nums[ptr++] = 0; // 在末尾填充零
        }
    }

    /**
     * 主方法，处理输入并输出结果。
     * 该方法从标准输入读取数组，并输出移动零后的数组。
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // 创建扫描器对象
        String[] s = sc.nextLine().split(","); // 读取数组
        int[] nums = new int[s.length]; // 创建数组
        for(int i = 0; i < s.length; i++) {
            nums[i] = Integer.parseInt(s[i]); // 解析数组
        }
        moveZeros mz = new moveZeros(); // 创建对象
        mz.mvZero(nums); // 移动零
        System.out.println(Arrays.toString(nums)); // 输出结果
        sc.close(); // 关闭扫描器
    }
}
